
#函数也可以作为参数对象传进去
def add(x,y):
    return x+y

def sub(x,y):
    return x-y


def apply(func,x,y):
    return func(x,y)

print(apply(add,2,3))
print(apply(sub,4,2))

# 闭包：
# 函数返回了一个他内置的函数+此函数执行时
# 需要的相关变量（在内置函数外）

def outer():
    name="python"
    age=100
    def inner():
        print(name)
        print(age)
    return inner

res=outer()
res()
print(res.__closure__) #查看闭包中的变量类型

#闭包
# 返回了装饰函数+被装饰函数
# @count_time
# def add(a,b):
#     return  a+b
#
# 等价于
# add=count_time(add)



def outer2(name):
    def inner2():
        print(name)
    return inner2

res1=outer2("python")
res2=outer2("java")
res1()
res2()
